package com.example.springboottest.example.sort;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 总体分为3类
 * 一、插入排序类
 * 直接插入排序    升级--->   希尔排序
 * 二、选择排序类
 * 交换排序        升级--->   简单选择排序        升级--->   堆排序
 * 三、交换排序类
 * 冒泡排序        升级--->   快速排序
 * 四、归并排序类
 * 归并排序
 * <p>
 * 性能从低像高排序
 * 1、ExchangeSort（交换排序）
 * 2、BubbleSort（冒泡排序）
 * 3、SimpleSelectionSort（简单选择排序）
 * 4、StraightInsertSort（直接插入排序）
 * 5、ShellSort（希尔排序）
 * 6、HeapSort（堆排序）
 * 7、MergingSort（归并排序）
 * 8、QuickSort（快速排序）整体性能上，属于最好
 * <p>
 * 6~8 强过 5，远强过 2~3，其中1几乎不推荐使用
 */
public abstract class SortBase {
    public int[] dataArr = {9, 1, 5, 8, 3, 7, 4, 6, 2};
//    public int[] dataArr = {49,38,65,97,76,13,27,49};

    /**
     * 交换方法
     *
     * @param dataArr
     * @param i
     * @param j
     */
    public void swap(int[] dataArr, int i, int j) {
        int temp = dataArr[i];
        dataArr[i] = dataArr[j];
        dataArr[j] = temp;
    }

    public void show(int[] dataArr) {
        List<Integer> list = Arrays.stream(dataArr).boxed().collect(Collectors.toList());
        list.forEach(e -> System.out.print(e + "\t"));
        System.out.println();
    }

    /**
     * 排序方法
     * 偷懒省掉了非空判断
     */
    public abstract void sort(int[] dataArr);
}
